package BankEntity; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.JOptionPane; import AccountEntities.Account; import AccountEntities.SavingAccount; import AccountEntities.SpendingAccount; import GraphicUserInterface.OutputFrame; import UserEntities.Person; import UserEntities.User; import Utilities.Helper; public class Bank implements BankProc { private Helper helper; private Map<Person, List<Account>> bankData; public Bank() { helper = new Helper(); updateBankData(); } public void updateBankData() { bankData = new HashMap<Person, List<Account>>(); helper.readFromSerFile(bankData, "BankData.ser"); } public Map<Person, List<Account>> getBankData() { return bankData; } public boolean isWellFormed() { boolean allGood = true; for (Map.Entry<Person, List<Account>> entry : bankData.entrySet()) { if ((!entry.getKey().equals(null)) && (entry.getValue().equals(null))) { allGood = false; } } return allGood; } @Override public void addAccount(String name, String accountType) { assert ((isWellFormed()) && (name != null) && (accountType != null)) : "Error at entering addAccount"; for (Map.Entry<Person, List<Account>> entry : bankData.entrySet()) { if (entry.getKey().getName().equals(name)) { Account account = null; if (accountType.equals("saving")) { account = new SavingAccount(helper.generateAccountID(name), name); entry.getValue().add(account); helper.updateSerFile(bankData, "BankData.ser"); } else if (accountType.equals("spending")) { account = new SpendingAccount(helper.generateAccountID(name), name); entry.getValue().add(account); helper.updateSerFile(bankData, "BankData.ser"); } } } assert (isWellFormed()) : "Error at exiting addAccount"; } @Override public void removeAccount(String name, String accountID) { assert ((isWellFormed()) && (name != null) && (accountID != null)) : "Error at entering removeAccount"; for (Map.Entry<Person, List<Account>> entry : bankData.entrySet()) { if (entry.getKey().getName().equals(name)) { for (Account account : entry.getValue()) { if (account.getID().equals(accountID)) { entry.getValue().remove(account); helper.updateSerFile(bankData, "BankData.ser"); break; } } break; } } assert (isWellFormed()) : "Error at exiting removeAccount"; } @Override public void addClient(String name, String password, String accountType) { assert ((isWellFormed()) && (name != null) && (password != null) && (accountType != null)) : "Error at entering addClient"; Person client = new User(name, password); Account account = null; if (accountType.equals("saving")) account = new SavingAccount(helper.generateAccountID(name), name); else if (accountType.equals("spending")) account = new SpendingAccount(helper.generateAccountID(name), name); if (!account.equals(null)) { List<Account> associatedAccounts = new ArrayList<Account>(); associatedAccounts.add(account); bankData.put(client, associatedAccounts); helper.updateSerFile(bankData, "BankData.ser"); } assert(isWellFormed()):"Error at exiting addClient"; } @Override public void removeClient(String name) { assert ((isWellFormed()) && (name != null)) : "Error at entering removeClient"; for (Map.Entry<Person, List<Account>> entry : bankData.entrySet()) { if (entry.getKey().getName().equals(name)) { bankData.remove(entry.getKey()); helper.updateSerFile(bankData, "BankData.ser"); break; } } assert(isWellFormed()):"Error at exiting removeClient"; } @Override public void addCash(String clientName, String accountID, double sum) { assert((isWellFormed()) && (clientName != null) && (accountID != null) && (sum >= 0.0)): "Error at entering addCash"; boolean accountFound = false; for (Map.Entry<Person, List<Account>> entry : bankData.entrySet()) { if (entry.getKey().getName().equals(clientName)) { for (Account account : entry.getValue()) { if (account.getID().equals(accountID)) { accountFound = true; account.addMoney(sum); helper.updateSerFile(bankData, "BankData.ser"); JOptionPane.showMessageDialog(null, "Successfull operation !", "Success", JOptionPane.INFORMATION_MESSAGE); break; } } if (accountFound) break; } } if (!accountFound) { JOptionPane.showMessageDialog(null, "Account not found !", "Error", JOptionPane.ERROR_MESSAGE); } assert(isWellFormed()):"Error at exiting addCash"; } @Override public void withdrawCash(String clientName, String accountID, double sum) { assert((isWellFormed()) && (clientName != null) && (accountID != null) && (sum >= 0.0)): "Error at entering withdrawCash"; double newSum = 0 - sum; addCash(clientName, accountID, newSum); assert(isWellFormed()):"Error at exiting withdrawCash"; } @Override public void generateReport(String client) { assert((isWellFormed()) && (client != null)):"Error at entering generateReport"; SpecificClientTable sct = new SpecificClientTable(client); new OutputFrame(sct.getTable(), "All Clients Data"); assert(isWellFormed()):"Error at exiting generateReport"; } }